k8s实践6:pod应用数据存储解耦pv&&pvc 您所在的位置:网站首页 k8s persistenvolume 和 persistentvolumeclaim k8s实践6:pod应用数据存储解耦pv&&pvc

k8s实践6:pod应用数据存储解耦pv&&pvc

2023-09-09 01:26| 来源: 网络整理| 查看: 265

k8s实践6:pod应用数据存储解耦pv&&pvc 原创

am2012 2019-04-09 11:37:26 博主文章分类:k8s ©著作权

文章标签 kubernetes pv pvc 文章分类 运维

©著作权归作者所有:来自51CTO博客作者am2012的原创作品,请联系作者获取转载授权,否则将追究法律责任 pv&&pvc

1.PV&&PVC基础概念

PersistentVolume(PV)是外部存储系统中的一块存储空间,管理员创建和维护.PV具有独立性,生命周期独立于Pod. PersistentVolumeClaim(PVC)是对PV的申请.PVC一般普通用户创建和维护. 需要为Pod分配资源时,用户创建一个PVC,指明存储资源的容量大小和访问模式,kubernetes会查找并提供满足条件的PV.

2.nfs部署

pv对接外部存储系统,这里是实验环境,对接nfs.生成环境,建议使用安全性高的分布式存储,ceph等.

nfs服务需要用到的软件 nfs-utils nfs主程序(rpc.nfsd,rbc.mountd) rpcbind rpc主程序

一些基础情况说明,现在整个集群环境3节点

kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-node1 Ready 19d v1.15.5 k8s-node2 Ready 19d v1.15.5 k8s-node3 Ready 19d v1.15.5

其中k8s-node3剩余空间比较大(这个随便哪个节点都可以,根据自己喜好和空间),因此使用k8s-node3来存储数据.

k8s-node3上部署nfs

安装软件包

[root@k8s-node3 ~]# yum install -y nfs-utils rpcbind

启动服务设置开机启动并查看当前状态

[root@k8s-node3 ~]# systemctl start rpcbind &&systemctl enable rpcbind [root@k8s-node3 ~]# systemctl start nfs && systemctl enable nfs [root@k8s-node3 ~]# systemctl status rpcbind ● rpcbind.service - RPC bind service Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2019-11-25 02:54:03 EST; 37s ago Main PID: 17314 (rpcbind) CGroup: /system.slice/rpcbind.service └─17314 /sbin/rpcbind -w Nov 25 02:54:03 k8s-node3 systemd[1]: Starting RPC bind service... Nov 25 02:54:03 k8s-node3 systemd[1]: Started RPC bind service. [root@k8s-node3 ~]# systemctl status rpcbind ● rpcbind.service - RPC bind service Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2019-11-25 02:54:03 EST; 37s ago Main PID: 17314 (rpcbind) CGroup: /system.slice/rpcbind.service └─17314 /sbin/rpcbind -w Nov 25 02:54:03 k8s-node3 systemd[1]: Starting RPC bind service... Nov 25 02:54:03 k8s-node3 systemd[1]: Started RPC bind service. [root@k8s-node3 ~]# systemctl status nfs ● nfs-server.service - NFS server and services Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: disabled) Active: active (exited) since Mon 2019-11-25 02:54:11 EST; 54s ago Main PID: 17405 (code=exited, status=0/SUCCESS) CGroup: /system.slice/nfs-server.service Nov 25 02:54:11 k8s-node3 systemd[1]: Starting NFS server and services... Nov 25 02:54:11 k8s-node3 systemd[1]: Started NFS server and services. 配置nfs服务端 /etc/exports是默认的nfs程序配置文件,默认为空 加入配置 [root@k8s-node3 ~]# mkdir -p /mnt/data [root@k8s-node3 ~]# echo "/mnt/data 192.168.174.0/24(rw,no_root_squash,no_all_squash,sync)" >/etc/exports

重启rpcbind和nfs服务,检索nfs本机挂载情况

[root@k8s-node3 ~]# systemctl restart rpcbind && systemctl restart nfs [root@k8s-node3 ~]# showmount -e localhost Export list for localhost: /mnt/data 192.168.174.0/24

可能的报错

注意: 192.168.32.0/24(rw,no_root_squash,no_all_squash,sync) 中间不能有空格,切记,不然报错. 注意: 必须在所有node安装rpcbind并启动,确保nfs能正常挂载。 否则报错: mount failed: exit status 32

nfs客户端配置

客户端也需要安装nfs-utils和rpcbind,同时只需要启动rpcbind.

yum install -y nfs-utils rpcbind

确保客户端能正常读取,见下

showmount -e k8s-node3 Export list for k8s-node3: /mnt/data 192.168.174.0/24

3.pv基础知识

创建pv

kubectl apply -f nfs-pv1.yaml persistentvolume/mypv1 created cat nfs-pv1.yaml apiVersion: v1 kind: PersistentVolume metadata: name: mypv1 spec: capacity: storage: 100Mi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain storageClassName: nfs nfs: path: /mnt/data/pv1 server: 192.168.184.130

基础参数

capacity指定PV的容量 accessModes指定访问模式,支持的模式有: ReadWriteOnce 能以read-write模式mount到单个节点 ReadOnlyMany 能以read-only模式mount到多个节点 ReadWriteMany 能以read-write模式mount到多个节点 节点其实就是pod,如果多个pod必须用ReadWriteMany persistentVolumeReclaimPolicy指定pv的回收策略 Retain 需要管理员收工回收,安全性最高 Recycle 清除PV中的数据,效果相当于执行rm -rf Delete 删除storage provider上对应的存储资源 storageClassName 指定PV的分类,PVC可以指定class申请相应的PV path: /mnt/data/pv1 指定nfs上对应的目录,需手动建立 kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE mypv1 100Mi RWX Retain Available nfs 2m1s

基础参数

PV是有状态的资源对象,有以下几种状态: Available:空闲状态 Bound:已经绑定到某个pvc上 Released:对应的pvc已经删除,但资源还没有被回收 Failed:pv自动回收失败

4.pvc基础知识

创建pvc

kubectl apply -f nfs-pvc1.yml persistentvolumeclaim/mypvc1 created cat nfs-pvc1.yml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mypvc1 spec: accessModes: - ReadWriteMany resources: requests: storage: 50Mi storageClassName: nfs kubectl get pv,pvc NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE persistentvolume/mypv1 100Mi RWX Retain Bound default/mypvc1 nfs 4m50s NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE persistentvolumeclaim/mypvc1 Bound mypv1 100Mi RWX nfs 40s

注意:pvc使用之后,pv的状态已经变成Bound

5.pv和pvc是怎么对应上的呢?

上面测试的pv和pvc是通过指定 storageClassName: nfs 参数对应的. 如果不指定这个参数,会怎样呢? 根据官方的描述: 用户创建一个PVC,指明存储资源的容量大小和访问模式,kubernetes会查找并提供满足条件的PV. 也就是说,pvc会根据自己的需求去申请合适的pv.

测试见下

pv

cat nfs-pv-noname1.yaml apiVersion: v1 kind: PersistentVolume metadata: name: mypv-noname1 spec: capacity: storage: 100Mi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain storageClassName: nfs: path: /mnt/data/pv1 server: 192.168.174.130 cat nfs-pv-noname2.yaml apiVersion: v1 kind: PersistentVolume metadata: name: mypv-noname2 spec: capacity: storage: 10Mi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain storageClassName: nfs: path: /mnt/data/pv1 server: 192.168.174.130

pvc

cat nfs-pvc-noname1.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mypvc-noname1 spec: accessModes: - ReadWriteMany resources: requests: storage: 10Mi storageClassName: cat nfs-pvc-noname2.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mypvc-noname2 spec: accessModes: - ReadWriteMany resources: requests: storage: 50Mi storageClassName:

执行情况见下

[root@k8s-node1 pv_pvc]# kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE mypv-noname1 100Mi RWX Retain Bound default/mypvc-noname2 4m51s mypv-noname2 10Mi RWX Retain Bound default/mypvc-noname1 4m17s mypv1 100Mi RWX Retain Bound default/mypvc1 nfs 15m [root@k8s-node1 pv_pvc]# kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE mypvc-noname1 Bound mypv-noname2 10Mi RWX 11s mypvc-noname2 Bound mypv-noname1 100Mi RWX 9s mypvc1 Bound mypv1 100Mi RWX nfs 11m [root@k8s-node1 pv_pvc]#

可以看到,不指定任何匹配参数的情况下,pvc自动申请使用匹配的pv.

注意:如果pv指定 storageClassName:参数,pvc不指定相对应的storageClassName:参数,pvc无法自动申请使用匹配该pv.比如上面的mypv1,无法被未指定对应名字和没有指定名字的pvc使用.

打赏 收藏 评论 分享 举报

上一篇:k8s实践5:一次失败的kubernetes集群崩溃处理记录

下一篇:k8s实践7:etcd实践操作记录



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有